/**
 * 
 */
package datamodel.trie;

import java.util.ArrayList;
import java.util.List;

import datamodel.RGB;


/**
 * the whole trie<br>
 * provides communication functionality 
 * 
 * @author Jakob Karolus, Kevin Munk
 * @version 1.0
 *
 */
public class Trie {

	/**Der Wurzelknoten.*/
	TrieNode root;
	
	public Trie(){
		this.root = new TrieNode();
	}
	
	public TrieNode getRoot() {
		return root;
	}
	
	/**
	 * Wandelt die Farben in binaryStrings um und erzeugt die 4-Tupel.
	 * @param color Die Farbe, die umgewandelt werden soll
	 * @return Eine Liste mit den 4-Tupel der umgewandelten Farbe
	 */
	public List<String> colorToKey(RGB color) {
		List<String> BinarySnake = new ArrayList<String>();

		// Farben in binaryString umwandeln und auf 8-Bitlänge erweitern
		String binaryBrightness = shift(Integer.toBinaryString(color.getBrightness()));
		String binaryRed = shift(Integer.toBinaryString(color.getRed()));
		String binaryGreen = shift(Integer.toBinaryString(color.getGreen()));
		String binaryBlue = shift(Integer.toBinaryString(color.getBlue()));

		// 8-Vierer-Tupel erzeugen
		for (int k = 0; k < 8; k++) {
			String pack = "";
			pack = pack + binaryBrightness.charAt(k) + binaryRed.charAt(k)
					+ binaryGreen.charAt(k) + binaryBlue.charAt(k);
			BinarySnake.add(pack);
		}
		return BinarySnake;
	}

	/**
	 * Erweitert den BinaryString um 0-en, sodass dieser 8 Bit lang ist
	 * @param binaryString Ein binaryString der auf 8 Bits erweitert werden soll. 
	 * @return Ein binaryString, der auf 8-Bitlänge erweitert wurde.
	 */
	private String shift(String binaryString) {
		for(int n=binaryString.length(); n<8;n++){
			binaryString = "0"+binaryString;
		}
		return binaryString;
	}
}
